home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs08.d81 / unapcarc.arc / RENAME.PAS next >
Pascal/Delphi Source File  |  2009-10-10  |  4KB  |  150 lines

  1. (*  "RENAME.PAS"  6/8/87  *)
  2. PROGRAM RENAME;
  3.  
  4. CONST MAXLIST=100;
  5.       DISKUNIT=8; DATACH=2; CMDCH=15;
  6.  
  7. TYPE NAME_DEF=ARRAY[0..15] OF CHAR;
  8.      RENAME_DEF=RECORD
  9.                   PC_NAME: STRING[12];
  10.                   CBM_TYPE: CHAR;
  11.                   NAME_CHANGE: BOOLEAN;
  12.                   CBM_NAME: NAME_DEF
  13.                 END;
  14.      DIR_ENTRY=RECORD
  15.                  NEXT_SECTOR,
  16.                  FILE_TYPE: CHAR;
  17.                  FILLER: INTEGER;
  18.                  FILE_NAME: NAME_DEF
  19.                END;
  20.  
  21. VAR OK, CHANGED, MATCH: BOOLEAN;
  22.     CH: CHAR;
  23.     SIZE, COMMAPOS, CHANGES,
  24.     SECTOR, NEXT,
  25.     I, J, K: INTEGER;
  26.     RENAMES, COMMAND: TEXT;
  27.     DATA: FILE OF DIR_ENTRY;
  28.     NUMBERSIGN: STRING[1];
  29.     HOLD_NAME: STRING[16];
  30.     FILENAME, LINE: STRING[64];
  31.     TEMP: NAME_DEF;
  32.     LIST: ARRAY[1..MAXLIST] OF RENAME_DEF;
  33.  
  34. PROCEDURE ERROR(CODE: INTEGER);
  35.   BEGIN
  36.     WRITELN('ERROR IN RENAME FILE!');
  37.     WRITELN('LINE=',I);
  38.     WRITELN('CODE=',CODE);
  39.     EXIT(PROGRAM)
  40.   END;
  41.  
  42. BEGIN
  43.   REPEAT
  44.     WRITELN('PROGRAM (C) 1987 BY W. KUSCHE');
  45.     WRITELN;
  46.     WRITELN('DO NOT SUPPLY ''.RNM'' SUFFIX!');
  47.     WRITE('NAME OF RENAME FILE? ');
  48.     READLN(FILENAME);
  49.     SIZE:=LENGTH(FILENAME);
  50.     IF SIZE=0
  51.         THEN EXIT(PROGRAM);
  52.     IF (SIZE>8) OR (POS('.',FILENAME)>0)
  53.         THEN OK:=FALSE
  54.       ELSE OK:=TRUE
  55.   UNTIL OK;
  56.   RESET(RENAMES,CONCAT(FILENAME,'.RNM'));
  57.   IF EOF(RENAMES)
  58.       THEN BEGIN
  59.         WRITELN('FILE NOT FOUND!');
  60.         EXIT(PROGRAM)
  61.       END;
  62.   I:=0;
  63.   REPEAT
  64.     READ(RENAMES,LINE);
  65.     IF LENGTH(LINE)>31
  66.         THEN ERROR(1);
  67.     I:=I+1;
  68.     COMMAPOS:=POS(',',LINE);
  69.     IF (COMMAPOS<2) OR (COMMAPOS>13)
  70.         THEN ERROR(2);
  71.     LIST[I].PC_NAME:=COPY(LINE,1,COMMAPOS-1);
  72.     LINE:=DELETE(LINE,1,COMMAPOS);
  73.     SIZE:=LENGTH(LINE);
  74.     IF SIZE=0
  75.         THEN ERROR(3);
  76.     CH:=LINE[1];
  77.     IF NOT ((CH='P') OR (CH='S'))
  78.         THEN ERROR(4);
  79.     IF CH='P'
  80.         THEN CH:=$82
  81.       ELSE CH:=$81;
  82.     LIST[I].CBM_TYPE:=CH;
  83.     IF SIZE=1
  84.         THEN LIST[I].NAME_CHANGE:=FALSE
  85.       ELSE BEGIN
  86.         LIST[I].NAME_CHANGE:=TRUE;
  87.         IF LINE[2]<>','
  88.             THEN ERROR(5);
  89.         LINE:=DELETE(LINE,1,2);
  90.         SIZE:=LENGTH(LINE);
  91.         FOR J:=0 TO SIZE-1
  92.           DO LIST[I].CBM_NAME[J]:=LINE[J+1];
  93.         IF SIZE<16
  94.             THEN FOR J:=SIZE TO 15
  95.                    DO LIST[I].CBM_NAME[J]:=$A0
  96.       END
  97.   UNTIL EOF(RENAMES);
  98.   CLOSE(RENAMES);
  99.   CHANGES:=I;
  100.   REWRITE(COMMAND,DISKUNIT,CMDCH,'I0');
  101.   NUMBERSIGN:='#';
  102.   REWRITE(DATA,DISKUNIT,DATACH,NUMBERSIGN);
  103.   SECTOR:=1;
  104.   REPEAT
  105.     WRITELN(COMMAND,'U1:',DATACH,' 0 18 ',SECTOR);
  106.     CHANGED:=FALSE;
  107.     FOR I:=0 TO 7
  108.       DO BEGIN
  109.         WRITELN(COMMAND,'B-P:',DATACH,' ',I*32+1);
  110.         GET(DATA);
  111.         IF I=0
  112.             THEN NEXT:=ORD(DATA^.NEXT_SECTOR);
  113.         IF ORD(DATA^.FILE_TYPE)>127
  114.             THEN BEGIN
  115.               HOLD_NAME:='';
  116.               FOR J:=0 TO 15
  117.                 DO BEGIN
  118.                   CH:=DATA^.FILE_NAME[J];
  119.                   IF CH<>$A0
  120.                       THEN HOLD_NAME:=CONCAT(HOLD_NAME,CH)
  121.                 END;
  122.               MATCH:=FALSE;
  123.               J:=0;
  124.               REPEAT
  125.                 J:=J+1;
  126.                 IF HOLD_NAME=LIST[J].PC_NAME
  127.                     THEN MATCH:=TRUE
  128.               UNTIL MATCH OR (J=CHANGES);
  129.               IF MATCH
  130.                   THEN BEGIN
  131.                     DATA^.FILE_TYPE:=LIST[J].CBM_TYPE;
  132.                     IF LIST[J].NAME_CHANGE
  133.                         THEN FOR K:=0 TO 15
  134.                                DO DATA^.FILE_NAME[K]:=LIST[J].CBM_NAME[K];
  135. (*
  136. TEMP:=LIST[J].CBM_NAME;
  137. DATA^.FILE_NAME:=TEMP
  138. *)
  139.                     WRITELN(COMMAND,'B-P:',DATACH,' ',I*32+1);
  140.                     PUT(DATA);
  141.                     CHANGED:=TRUE
  142.                   END
  143.             END
  144.       END;
  145.     IF CHANGED
  146.         THEN WRITELN(COMMAND,'U2:',DATACH,' 0 18 ',SECTOR);
  147.     SECTOR:=NEXT
  148.   UNTIL SECTOR>20
  149. END.
  150.